home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / xfs / dmapi.h next >
C/C++ Source or Header  |  2006-01-09  |  23KB  |  1,088 lines

  1. /*
  2.  * Copyright (c) 1995-2003 Silicon Graphics, Inc.  All Rights Reserved.
  3.  *
  4.  * This program is free software; you can redistribute it and/or modify it
  5.  * under the terms of version 2.1 of the GNU Lesser General Public License
  6.  * as published by the Free Software Foundation.
  7.  *
  8.  * This program is distributed in the hope that it would be useful, but
  9.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  10.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11.  *
  12.  * Further, this software is distributed without any warranty that it is
  13.  * free of the rightful claim of any third person regarding infringement
  14.  * or the like.     Any license provided herein, whether implied or
  15.  * otherwise, applies only to this software file.  Patent licenses, if
  16.  * any, provided herein do not apply to combinations of this program with
  17.  * other software, or any other product whatsoever.
  18.  *
  19.  * You should have received a copy of the GNU Lesser General Public
  20.  * License along with this program; if not, write the Free Software
  21.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307,
  22.  * USA.
  23.  *
  24.  * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
  25.  * Mountain View, CA  94043, or:
  26.  *
  27.  * http://www.sgi.com
  28.  *
  29.  * For further information regarding this notice, see:
  30.  *
  31.  * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
  32.  */
  33.  
  34. #ifndef __DMAPI_H__
  35. #define __DMAPI_H__
  36.  
  37. #ifdef    __cplusplus
  38. extern    "C" {
  39. #endif
  40.  
  41. #ifndef __KERNEL__
  42. #include <sys/types.h>
  43. #endif
  44. #include <linux/types.h>
  45.  
  46. /**************************************************************************
  47.  *                                      *
  48.  * The SGI implementation of DMAPI is based upon the X/Open document      *
  49.  *    Systems Management: Data Storage Managment (XDSM) API          *
  50.  * dated February 1997.     Not all DMAPI functions and structure fields      *
  51.  * have been implemented.  Most importantly, the DMAPI functions      *
  52.  * dm_request_right, dm_release_right, dm_query_right, dm_upgrade_right      *
  53.  * and dm_downgrade_right do not work as described in the specification.  *
  54.  *                                      *
  55.  * The XFS filesystem currently does not allow its locking mechanisms to  *
  56.  * be externally accessed from user space.  While the above-mentioned      *
  57.  * dm_xxx_right functions exist and can be called by applications, they      *
  58.  * always return successfully without actually obtaining any locks      *
  59.  * within the filesystem.                          *
  60.  *                                      *
  61.  * Applications which do not need full rights support and which only      *
  62.  * make dm_xxx_right calls in order to satisfy the input requirements of  *
  63.  * other DMAPI calls should be able to use these routines to avoid      *
  64.  * having to implement special-case code for SGI platforms.  Applications *
  65.  * which truely need the capabilities of a full implementation of rights  *
  66.  * will unfortunately have to come up with alternate software solutions      *
  67.  * until such time as rights can be completely implemented.          *
  68.  *                                      *
  69.  * Functions and structure fields defined within this file which are not  *
  70.  * supported in the SGI implementation of DMAPI are indicated by comments *
  71.  * following their definitions such as "not supported", or "not          *
  72.  * completely supported".  Any function or field not so marked may be      *
  73.  * assumed to work exactly according to the spec.              *
  74.  *                                      *
  75.  **************************************************************************/
  76.  
  77.  
  78.  
  79. /* The first portion of this file contains defines and typedefs that are
  80.    DMAPI implementation-dependent, and could be different on other platforms.
  81. */
  82.  
  83. typedef __s64        dm_attrloc_t;
  84. typedef unsigned int    dm_boolean_t;
  85. typedef __u64        dm_eventset_t;
  86. typedef __u64        dm_fsid_t;
  87. typedef __u64        dm_ino_t;
  88. typedef __u32        dm_igen_t;
  89. typedef __s64        dm_off_t;
  90. typedef unsigned int    dm_sequence_t;
  91. typedef int        dm_sessid_t;
  92. typedef __u64        dm_size_t;
  93. typedef __s64        dm_ssize_t;
  94. typedef int        dm_token_t;
  95.  
  96. /* XXX dev_t, mode_t, and nlink_t are not the same size in kernel space
  97.    and user space.  This affects the field offsets for dm_stat_t.
  98.    The following solution is temporary.
  99.  
  100.    user space sizes:  dev_t=8  mode_t=4     nlink_t=4
  101.    kernel space       :  dev_t=2  mode_t=2     nlink_t=2
  102.  
  103. */
  104. typedef __s64        dm_dev_t;
  105. typedef int        dm_mode_t;
  106. typedef int        dm_nlink_t;
  107.  
  108.  
  109. #define DM_REGION_NOEVENT    0x0
  110. #define DM_REGION_READ        0x1
  111. #define DM_REGION_WRITE        0x2
  112. #define DM_REGION_TRUNCATE    0x4
  113.  
  114. /* Values for the mask argument used with dm_get_fileattr, dm_get_bulkattr,
  115.    dm_get_dirattrs, and dm_set_fileattr.
  116. */
  117.  
  118. #define DM_AT_MODE    0x0001
  119. #define DM_AT_UID    0x0002
  120. #define DM_AT_GID    0x0004
  121. #define DM_AT_ATIME    0x0008
  122. #define DM_AT_MTIME    0x0010
  123. #define DM_AT_CTIME    0x0020
  124. #define DM_AT_SIZE    0x0040
  125. #define DM_AT_DTIME    0x0080
  126. #define DM_AT_HANDLE    0x0100
  127. #define DM_AT_EMASK    0x0200
  128. #define DM_AT_PMANR    0x0400
  129. #define DM_AT_PATTR    0x0800
  130. #define DM_AT_STAT    0x1000
  131. #define DM_AT_CFLAG    0x2000
  132.  
  133. #define DM_EV_WAIT    0x1        /* used in dm_get_events() */
  134.  
  135. #define DM_MOUNT_RDONLY 0x1        /* me_mode field in dm_mount_event_t */
  136.  
  137. #define DM_RR_WAIT    0x1
  138.  
  139. #define DM_UNMOUNT_FORCE 0x1        /* ne_mode field in dm_namesp_event_t */
  140.  
  141. #define DM_WRITE_SYNC    0x1        /* used in dm_write_invis() */
  142.  
  143. #define DM_SESSION_INFO_LEN    256
  144. #define DM_NO_SESSION        0
  145. #define DM_TRUE            1
  146. #define DM_FALSE        0
  147. #define DM_INVALID_TOKEN    0
  148. #define DM_NO_TOKEN        (-1)
  149. #define DM_INVALID_HANP        NULL
  150. #define DM_INVALID_HLEN        0
  151. #define DM_GLOBAL_HANP        ((void *)(1LL))
  152. #define DM_GLOBAL_HLEN        ((size_t)(1))
  153. #define DM_VER_STR_CONTENTS    "SGI DMAPI (XDSM) API, Release 1.0."
  154.  
  155.  
  156. #define DMEV_SET(event_type, event_list) \
  157.     ((event_list) |= (1 << (event_type)))
  158. #define DMEV_CLR(event_type, event_list) \
  159.     ((event_list) &= ~(1 << (event_type)))
  160. #define DMEV_ISSET(event_type, event_list) \
  161.     (int)(((event_list) & (1 << (event_type))) != 0)
  162. #define DMEV_ZERO(event_list) \
  163.     (event_list) = 0
  164.  
  165.  
  166. typedef struct {
  167.     int    vd_offset;    /* offset from start of containing struct */
  168.     unsigned int    vd_length;    /* length of data starting at vd_offset */
  169. } dm_vardata_t;
  170.  
  171. #define DM_GET_VALUE(p, field, type) \
  172.     ((type) ((char *)(p) + (p)->field.vd_offset))
  173.  
  174. #define DM_GET_LEN(p, field) \
  175.     ((p)->field.vd_length)
  176.  
  177. #define DM_STEP_TO_NEXT(p, type) \
  178.     ((type) ((p)->_link ? (char *)(p) + (p)->_link : NULL))
  179.  
  180.  
  181.  
  182.  
  183. /* The remainder of this include file contains defines, typedefs, and
  184.    structures which are strictly defined by the DMAPI 2.3 specification.
  185.  
  186.    (The _link field which appears in several structures is an
  187.    implementation-specific way to implement DM_STEP_TO_NEXT, and
  188.    should not be referenced directly by application code.)
  189. */
  190.  
  191.  
  192. #define DM_ATTR_NAME_SIZE    8
  193.  
  194.  
  195. struct dm_attrname {
  196.     unsigned char    an_chars[DM_ATTR_NAME_SIZE];
  197. };
  198. typedef struct dm_attrname    dm_attrname_t;
  199.  
  200.  
  201. struct dm_attrlist {
  202.     int        _link;
  203.     dm_attrname_t    al_name;
  204.     dm_vardata_t    al_data;
  205. };
  206. typedef struct dm_attrlist    dm_attrlist_t;
  207.  
  208.  
  209. typedef enum {
  210.     DM_CONFIG_INVALID,
  211.     DM_CONFIG_BULKALL,
  212.     DM_CONFIG_CREATE_BY_HANDLE,
  213.     DM_CONFIG_DTIME_OVERLOAD,
  214.     DM_CONFIG_LEGACY,
  215.     DM_CONFIG_LOCK_UPGRADE,
  216.     DM_CONFIG_MAX_ATTR_ON_DESTROY,
  217.     DM_CONFIG_MAX_ATTRIBUTE_SIZE,
  218.     DM_CONFIG_MAX_HANDLE_SIZE,
  219.     DM_CONFIG_MAX_MANAGED_REGIONS,
  220.     DM_CONFIG_MAX_MESSAGE_DATA,
  221.     DM_CONFIG_OBJ_REF,
  222.     DM_CONFIG_PENDING,
  223.     DM_CONFIG_PERS_ATTRIBUTES,
  224.     DM_CONFIG_PERS_EVENTS,
  225.     DM_CONFIG_PERS_INHERIT_ATTRIBS,
  226.     DM_CONFIG_PERS_MANAGED_REGIONS,
  227.     DM_CONFIG_PUNCH_HOLE,
  228.     DM_CONFIG_TOTAL_ATTRIBUTE_SPACE,
  229.     DM_CONFIG_WILL_RETRY
  230. } dm_config_t;
  231.  
  232.  
  233. struct    dm_dioinfo {            /* non-standard SGI addition */
  234.     unsigned int    d_mem;
  235.     unsigned int    d_miniosz;
  236.     unsigned int    d_maxiosz;
  237.     dm_boolean_t    d_dio_only;
  238. };
  239. typedef struct dm_dioinfo    dm_dioinfo_t;
  240.  
  241.  
  242. struct dm_dispinfo {
  243.     int        _link;
  244.     unsigned int    di_pad1;        /* reserved; do not reference */
  245.     dm_vardata_t    di_fshandle;
  246.     dm_eventset_t    di_eventset;
  247. };
  248. typedef struct dm_dispinfo    dm_dispinfo_t;
  249.  
  250.  
  251. #ifndef HAVE_DM_EVENTTYPE_T
  252. #define HAVE_DM_EVENTTYPE_T
  253. typedef enum {
  254.     DM_EVENT_INVALID    = -1,
  255.     DM_EVENT_CANCEL        = 0,        /* not supported */
  256.     DM_EVENT_MOUNT        = 1,
  257.     DM_EVENT_PREUNMOUNT    = 2,
  258.     DM_EVENT_UNMOUNT    = 3,
  259.     DM_EVENT_DEBUT        = 4,        /* not supported */
  260.     DM_EVENT_CREATE        = 5,
  261.     DM_EVENT_CLOSE        = 6,        /* not supported */
  262.     DM_EVENT_POSTCREATE    = 7,
  263.     DM_EVENT_REMOVE        = 8,
  264.     DM_EVENT_POSTREMOVE    = 9,
  265.     DM_EVENT_RENAME        = 10,
  266.     DM_EVENT_POSTRENAME    = 11,
  267.     DM_EVENT_LINK        = 12,
  268.     DM_EVENT_POSTLINK    = 13,
  269.     DM_EVENT_SYMLINK    = 14,
  270.     DM_EVENT_POSTSYMLINK    = 15,
  271.     DM_EVENT_READ        = 16,
  272.     DM_EVENT_WRITE        = 17,
  273.     DM_EVENT_TRUNCATE    = 18,
  274.     DM_EVENT_ATTRIBUTE    = 19,
  275.     DM_EVENT_DESTROY    = 20,
  276.     DM_EVENT_NOSPACE    = 21,
  277.     DM_EVENT_USER        = 22,
  278.     DM_EVENT_MAX        = 23
  279. } dm_eventtype_t;
  280. #endif
  281.  
  282.  
  283. struct dm_eventmsg {
  284.     int        _link;
  285.     dm_eventtype_t    ev_type;
  286.     dm_token_t    ev_token;
  287.     dm_sequence_t    ev_sequence;
  288.     dm_vardata_t    ev_data;
  289. };
  290. typedef struct dm_eventmsg    dm_eventmsg_t;
  291.  
  292.  
  293. struct dm_cancel_event {            /* not supported */
  294.     dm_sequence_t    ce_sequence;
  295.     dm_token_t    ce_token;
  296. };
  297. typedef struct dm_cancel_event    dm_cancel_event_t;
  298.  
  299.  
  300. struct dm_data_event {
  301.     dm_vardata_t    de_handle;
  302.     dm_off_t    de_offset;
  303.     dm_size_t    de_length;
  304. };
  305. typedef struct dm_data_event dm_data_event_t;
  306.  
  307. struct dm_destroy_event {
  308.     dm_vardata_t        ds_handle;
  309.     dm_attrname_t        ds_attrname;
  310.     dm_vardata_t        ds_attrcopy;
  311. };
  312. typedef struct dm_destroy_event dm_destroy_event_t;
  313.  
  314. struct dm_mount_event {
  315.     dm_mode_t    me_mode;
  316.     dm_vardata_t    me_handle1;
  317.     dm_vardata_t    me_handle2;
  318.     dm_vardata_t    me_name1;
  319.     dm_vardata_t    me_name2;
  320.     dm_vardata_t    me_roothandle;
  321. };
  322. typedef struct dm_mount_event dm_mount_event_t;
  323.  
  324. struct dm_namesp_event {
  325.     dm_mode_t    ne_mode;
  326.     dm_vardata_t    ne_handle1;
  327.     dm_vardata_t    ne_handle2;
  328.     dm_vardata_t    ne_name1;
  329.     dm_vardata_t    ne_name2;
  330.     int        ne_retcode;
  331. };
  332. typedef struct dm_namesp_event dm_namesp_event_t;
  333.  
  334.  
  335. typedef enum {
  336.     DM_EXTENT_INVALID,
  337.     DM_EXTENT_RES,
  338.     DM_EXTENT_HOLE
  339. } dm_extenttype_t;
  340.  
  341.  
  342. struct dm_extent {
  343.     dm_extenttype_t ex_type;
  344.     unsigned int    ex_pad1;        /* reserved; do not reference */
  345.     dm_off_t    ex_offset;
  346.     dm_size_t    ex_length;
  347. };
  348. typedef struct dm_extent dm_extent_t;
  349.  
  350. struct dm_fileattr {
  351.     dm_mode_t    fa_mode;
  352.     uid_t        fa_uid;
  353.     gid_t        fa_gid;
  354.     time_t        fa_atime;
  355.     time_t        fa_mtime;
  356.     time_t        fa_ctime;
  357.     time_t        fa_dtime;
  358.     unsigned int    fa_pad1;        /* reserved; do not reference */
  359.     dm_off_t    fa_size;
  360. };
  361. typedef struct dm_fileattr dm_fileattr_t;
  362.  
  363.  
  364. struct dm_inherit {                /* not supported */
  365.     dm_attrname_t    ih_name;
  366.     dm_mode_t    ih_filetype;
  367. };
  368. typedef struct dm_inherit dm_inherit_t;
  369.  
  370.  
  371. typedef enum {
  372.     DM_MSGTYPE_INVALID,
  373.     DM_MSGTYPE_SYNC,
  374.     DM_MSGTYPE_ASYNC
  375. } dm_msgtype_t;
  376.  
  377.  
  378. struct dm_region {
  379.     dm_off_t    rg_offset;
  380.     dm_size_t    rg_size;
  381.     unsigned int    rg_flags;
  382.     unsigned int    rg_pad1;        /* reserved; do not reference */
  383. };
  384. typedef struct dm_region dm_region_t;
  385.  
  386.  
  387. typedef enum {
  388.     DM_RESP_INVALID,
  389.     DM_RESP_CONTINUE,
  390.     DM_RESP_ABORT,
  391.     DM_RESP_DONTCARE
  392. } dm_response_t;
  393.  
  394.  
  395. #ifndef HAVE_DM_RIGHT_T
  396. #define HAVE_DM_RIGHT_T
  397. typedef enum {
  398.     DM_RIGHT_NULL,
  399.     DM_RIGHT_SHARED,
  400.     DM_RIGHT_EXCL
  401. } dm_right_t;
  402. #endif
  403.  
  404.  
  405. struct dm_stat {
  406.     int        _link;
  407.     dm_vardata_t    dt_handle;
  408.     dm_vardata_t    dt_compname;
  409.     int        dt_nevents;
  410.     dm_eventset_t    dt_emask;
  411.     int        dt_pers;        /* field not supported */
  412.     int        dt_pmanreg;
  413.     time_t        dt_dtime;
  414.     unsigned int    dt_change;        /* field not supported */
  415.     unsigned int    dt_pad1;        /* reserved; do not reference */
  416.     dm_dev_t    dt_dev;
  417.     dm_ino_t    dt_ino;
  418.     dm_mode_t    dt_mode;
  419.     dm_nlink_t    dt_nlink;
  420.     uid_t        dt_uid;
  421.     gid_t        dt_gid;
  422.     dm_dev_t    dt_rdev;
  423.     unsigned int    dt_pad2;        /* reserved; do not reference */
  424.     dm_off_t    dt_size;
  425.     time_t        dt_atime;
  426.     time_t        dt_mtime;
  427.     time_t        dt_ctime;
  428.     unsigned int    dt_blksize;
  429.     dm_size_t    dt_blocks;
  430.  
  431.     /* Non-standard filesystem-specific fields.  Currently XFS is the only
  432.        supported filesystem type.
  433.     */
  434.  
  435.     __u64    dt_pad3;    /* reserved; do not reference */
  436.     int        dt_fstype;    /* filesystem index; see sysfs(2) */
  437.     union    {
  438.         struct    {
  439.             dm_igen_t    igen;
  440.             unsigned int    xflags;
  441.             unsigned int    extsize;
  442.             unsigned int    extents;
  443.             unsigned short    aextents;
  444.             unsigned short    dmstate;
  445.         } sgi_xfs;
  446.     } fsys_dep;
  447. };
  448. typedef struct dm_stat    dm_stat_t;
  449.  
  450. #define dt_xfs_igen    fsys_dep.sgi_xfs.igen
  451. #define dt_xfs_xflags    fsys_dep.sgi_xfs.xflags
  452. #define dt_xfs_extsize    fsys_dep.sgi_xfs.extsize
  453. #define dt_xfs_extents    fsys_dep.sgi_xfs.extents
  454. #define dt_xfs_aextents fsys_dep.sgi_xfs.aextents
  455. #define dt_xfs_dmstate    fsys_dep.sgi_xfs.dmstate
  456.  
  457. /* Flags for the non-standard dt_xfs_xflags field. */
  458.  
  459. #define DM_XFLAG_REALTIME    0x00000001
  460. #define DM_XFLAG_PREALLOC    0x00000002
  461. #define DM_XFLAG_IMMUTABLE    0x00000008
  462. #define DM_XFLAG_APPEND        0x00000010
  463. #define DM_XFLAG_SYNC        0x00000020
  464. #define DM_XFLAG_NOATIME    0x00000040
  465. #define DM_XFLAG_NODUMP        0x00000080
  466. #define DM_XFLAG_HASATTR    0x80000000
  467.  
  468.  
  469. struct    dm_timestruct {
  470.     time_t        dm_tv_sec;
  471.     int        dm_tv_nsec;
  472. };
  473. typedef struct dm_timestruct dm_timestruct_t;
  474.  
  475.  
  476. struct    dm_xstat {                /* not supported */
  477.     dm_stat_t    dx_statinfo;
  478.     dm_vardata_t    dx_attrdata;
  479. };
  480. typedef struct dm_xstat dm_xstat_t;
  481.  
  482.  
  483. #define MAXDMFSFIDSZ    46
  484.  
  485. typedef struct dm_fsfid {
  486.     __u16        fid_len;        /* length of data in bytes */
  487.     unsigned char    fid_data[MAXDMFSFIDSZ];    /* data (fid_len worth)  */
  488. } dm_fsfid_t;
  489.  
  490. struct dm_fid {
  491.     __u16    dm_fid_len;        /* length of remainder    */
  492.     __u16    dm_fid_pad;
  493.     __u32    dm_fid_gen;        /* generation number    */
  494.     __u64    dm_fid_ino;        /* 64 bits inode number */
  495. };
  496. typedef struct dm_fid dm_fid_t;
  497.  
  498.  
  499. struct dm_handle {
  500.     union {
  501.         __s64        align;    /* force alignment of ha_fid     */
  502.         dm_fsid_t  _ha_fsid;    /* unique file system identifier */
  503.     } ha_u;
  504.     dm_fid_t    ha_fid;        /* file system specific file ID     */
  505. };
  506. typedef struct dm_handle dm_handle_t;
  507. #define ha_fsid ha_u._ha_fsid
  508.  
  509. #define DM_HSIZE(handle)    (((char *) &(handle).ha_fid.dm_fid_pad     \
  510.                  - (char *) &(handle))              \
  511.                  + (handle).ha_fid.dm_fid_len)
  512.  
  513. #define DM_HANDLE_CMP(h1, h2)    memcmp(h1, h2, sizeof(dm_handle_t))
  514.  
  515. #define DM_FSHSIZE        sizeof(dm_fsid_t)
  516.  
  517.  
  518. /* The following list provides the prototypes for all functions defined in
  519.    the DMAPI interface.
  520. */
  521.  
  522. extern int
  523. dm_clear_inherit(                /* not supported */
  524.     dm_sessid_t    sid,
  525.     void        *hanp,
  526.     size_t        hlen,
  527.     dm_token_t    token,
  528.     dm_attrname_t    *attrnamep);
  529.  
  530. extern int
  531. dm_create_by_handle(                /* not supported */
  532.     dm_sessid_t    sid,
  533.     void        *dirhanp,
  534.     size_t        dirhlen,
  535.     dm_token_t    token,
  536.     void        *hanp,
  537.     size_t        hlen,
  538.     char        *cname);
  539.  
  540. extern int
  541. dm_create_session(
  542.     dm_sessid_t    oldsid,
  543.     char        *sessinfop,
  544.     dm_sessid_t    *newsidp);
  545.  
  546. extern int
  547. dm_create_userevent(
  548.     dm_sessid_t    sid,
  549.     size_t        msglen,
  550.     void        *msgdatap,
  551.     dm_token_t    *tokenp);
  552.  
  553. extern int
  554. dm_destroy_session(
  555.     dm_sessid_t    sid);
  556.  
  557. extern int
  558. dm_downgrade_right(        /* not completely supported; see caveat above */
  559.     dm_sessid_t    sid,
  560.     void        *hanp,
  561.     size_t        hlen,
  562.     dm_token_t    token);
  563.  
  564. extern int
  565. dm_fd_to_handle(
  566.     int        fd,
  567.     void        **hanpp,
  568.     size_t        *hlenp);
  569.  
  570. extern int
  571. dm_find_eventmsg(
  572.     dm_sessid_t    sid,
  573.     dm_token_t    token,
  574.     size_t        buflen,
  575.     void        *bufp,
  576.     size_t        *rlenp);
  577.  
  578. extern int
  579. dm_get_allocinfo(
  580.     dm_sessid_t    sid,
  581.     void        *hanp,
  582.     size_t        hlen,
  583.     dm_token_t    token,
  584.     dm_off_t    *offp,
  585.     unsigned int    nelem,
  586.     dm_extent_t    *extentp,
  587.     unsigned int    *nelemp);
  588.  
  589. extern int
  590. dm_get_bulkall(                    /* not supported */
  591.     dm_sessid_t    sid,
  592.     void        *hanp,
  593.     size_t        hlen,
  594.     dm_token_t    token,
  595.     unsigned int    mask,
  596.     dm_attrname_t    *attrnamep,
  597.     dm_attrloc_t    *locp,
  598.     size_t        buflen,
  599.     void        *bufp,
  600.     size_t        *rlenp);
  601.  
  602. extern int
  603. dm_get_bulkattr(
  604.     dm_sessid_t    sid,
  605.     void        *hanp,
  606.     size_t        hlen,
  607.     dm_token_t    token,
  608.     unsigned int    mask,
  609.     dm_attrloc_t    *locp,
  610.     size_t        buflen,
  611.     void        *bufp,
  612.     size_t        *rlenp);
  613.  
  614. extern int
  615. dm_get_config(
  616.     void        *hanp,
  617.     size_t        hlen,
  618.     dm_config_t    flagname,
  619.     dm_size_t    *retvalp);
  620.  
  621. extern int
  622. dm_get_config_events(
  623.     void        *hanp,
  624.     size_t        hlen,
  625.     unsigned int    nelem,
  626.     dm_eventset_t    *eventsetp,
  627.     unsigned int    *nelemp);
  628.  
  629. extern int
  630. dm_get_dirattrs(
  631.     dm_sessid_t    sid,
  632.     void        *hanp,
  633.     size_t        hlen,
  634.     dm_token_t    token,
  635.     unsigned int    mask,
  636.     dm_attrloc_t    *locp,
  637.     size_t        buflen,
  638.     void        *bufp,
  639.     size_t        *rlenp);
  640.  
  641. extern int
  642. dm_get_dmattr(
  643.     dm_sessid_t    sid,
  644.     void        *hanp,
  645.     size_t        hlen,
  646.     dm_token_t    token,
  647.     dm_attrname_t    *attrnamep,
  648.     size_t        buflen,
  649.     void        *bufp,
  650.     size_t        *rlenp);
  651.  
  652. extern int
  653. dm_get_eventlist(
  654.     dm_sessid_t    sid,
  655.     void        *hanp,
  656.     size_t        hlen,
  657.     dm_token_t    token,
  658.     unsigned int    nelem,
  659.     dm_eventset_t    *eventsetp,
  660.     unsigned int    *nelemp);
  661.  
  662. extern int
  663. dm_get_events(
  664.     dm_sessid_t    sid,
  665.     unsigned int    maxmsgs,
  666.     unsigned int    flags,
  667.     size_t        buflen,
  668.     void        *bufp,
  669.     size_t        *rlenp);
  670.  
  671. extern int
  672. dm_get_fileattr(
  673.     dm_sessid_t    sid,
  674.     void        *hanp,
  675.     size_t        hlen,
  676.     dm_token_t    token,
  677.     unsigned int    mask,
  678.     dm_stat_t    *statp);
  679.  
  680. extern int
  681. dm_get_mountinfo(
  682.     dm_sessid_t    sid,
  683.     void        *hanp,
  684.     size_t        hlen,
  685.     dm_token_t    token,
  686.     size_t        buflen,
  687.     void        *bufp,
  688.     size_t        *rlenp);
  689.  
  690. extern int
  691. dm_get_region(
  692.     dm_sessid_t    sid,
  693.     void        *hanp,
  694.     size_t        hlen,
  695.     dm_token_t    token,
  696.     unsigned int    nelem,
  697.     dm_region_t    *regbufp,
  698.     unsigned int    *nelemp);
  699.  
  700. extern int
  701. dm_getall_disp(
  702.     dm_sessid_t    sid,
  703.     size_t        buflen,
  704.     void        *bufp,
  705.     size_t        *rlenp);
  706.  
  707. extern int
  708. dm_getall_dmattr(
  709.     dm_sessid_t    sid,
  710.     void        *hanp,
  711.     size_t        hlen,
  712.     dm_token_t    token,
  713.     size_t        buflen,
  714.     void        *bufp,
  715.     size_t        *rlenp);
  716.  
  717. extern int
  718. dm_getall_inherit(                /* not supported */
  719.     dm_sessid_t    sid,
  720.     void        *hanp,
  721.     size_t        hlen,
  722.     dm_token_t    token,
  723.     unsigned int    nelem,
  724.     dm_inherit_t    *inheritbufp,
  725.     unsigned int    *nelemp);
  726.  
  727. extern int
  728. dm_getall_sessions(
  729.     unsigned int    nelem,
  730.     dm_sessid_t    *sidbufp,
  731.     unsigned int    *nelemp);
  732.  
  733. extern int
  734. dm_getall_tokens(
  735.     dm_sessid_t    sid,
  736.     unsigned int    nelem,
  737.     dm_token_t    *tokenbufp,
  738.     unsigned int    *nelemp);
  739.  
  740. extern int
  741. dm_handle_cmp(
  742.     void        *hanp1,
  743.     size_t        hlen1,
  744.     void        *hanp2,
  745.     size_t        hlen2);
  746.  
  747. extern void
  748. dm_handle_free(
  749.     void        *hanp,
  750.     size_t        hlen);
  751.  
  752. extern u_int
  753. dm_handle_hash(
  754.     void        *hanp,
  755.     size_t        hlen);
  756.  
  757. extern dm_boolean_t
  758. dm_handle_is_valid(
  759.     void        *hanp,
  760.     size_t        hlen);
  761.  
  762. extern int
  763. dm_handle_to_fshandle(
  764.     void        *hanp,
  765.     size_t        hlen,
  766.     void        **fshanpp,
  767.     size_t        *fshlenp);
  768.  
  769. extern int
  770. dm_handle_to_fsid(
  771.     void        *hanp,
  772.     size_t        hlen,
  773.     dm_fsid_t    *fsidp);
  774.  
  775. extern int
  776. dm_handle_to_igen(
  777.     void        *hanp,
  778.     size_t        hlen,
  779.     dm_igen_t    *igenp);
  780.  
  781. extern int
  782. dm_handle_to_ino(
  783.     void        *hanp,
  784.     size_t        hlen,
  785.     dm_ino_t    *inop);
  786.  
  787. extern int
  788. dm_handle_to_path(
  789.     void        *dirhanp,
  790.     size_t        dirhlen,
  791.     void        *targhanp,
  792.     size_t        targhlen,
  793.     size_t        buflen,
  794.     char        *pathbufp,
  795.     size_t        *rlenp);
  796.  
  797. extern int
  798. dm_init_attrloc(
  799.     dm_sessid_t    sid,
  800.     void        *hanp,
  801.     size_t        hlen,
  802.     dm_token_t    token,
  803.     dm_attrloc_t    *locp);
  804.  
  805. extern int
  806. dm_init_service(
  807.     char        **versionstrpp);
  808.  
  809. extern int
  810. dm_make_handle(
  811.     dm_fsid_t    *fsidp,
  812.     dm_ino_t    *inop,
  813.     dm_igen_t    *igenp,
  814.     void        **hanpp,
  815.     size_t        *hlenp);
  816.  
  817. extern int
  818. dm_make_fshandle(
  819.     dm_fsid_t    *fsidp,
  820.     void        **hanpp,
  821.     size_t        *hlenp);
  822.  
  823. extern int
  824. dm_mkdir_by_handle(                /* not supported */
  825.     dm_sessid_t    sid,
  826.     void        *dirhanp,
  827.     size_t        dirhlen,
  828.     dm_token_t    token,
  829.     void        *hanp,
  830.     size_t        hlen,
  831.     char        *cname);
  832.  
  833. extern int
  834. dm_move_event(
  835.     dm_sessid_t    srcsid,
  836.     dm_token_t    token,
  837.     dm_sessid_t    targetsid,
  838.     dm_token_t    *rtokenp);
  839.  
  840. extern int
  841. dm_obj_ref_hold(
  842.     dm_sessid_t    sid,
  843.     dm_token_t    token,
  844.     void        *hanp,
  845.     size_t        hlen);
  846.  
  847. extern int
  848. dm_obj_ref_query(
  849.     dm_sessid_t    sid,
  850.     dm_token_t    token,
  851.     void        *hanp,
  852.     size_t        hlen);
  853.  
  854. extern int
  855. dm_obj_ref_rele(
  856.     dm_sessid_t    sid,
  857.     dm_token_t    token,
  858.     void        *hanp,
  859.     size_t        hlen);
  860.  
  861. extern int
  862. dm_path_to_fshandle(
  863.     char        *path,
  864.     void        **hanpp,
  865.     size_t        *hlenp);
  866.  
  867. extern int
  868. dm_path_to_handle(
  869.     char        *path,
  870.     void        **hanpp,
  871.     size_t        *hlenp);
  872.  
  873. extern int
  874. dm_pending(
  875.     dm_sessid_t    sid,
  876.     dm_token_t    token,
  877.     dm_timestruct_t *delay);
  878.  
  879. extern int
  880. dm_probe_hole(
  881.     dm_sessid_t    sid,
  882.     void        *hanp,
  883.     size_t        hlen,
  884.     dm_token_t    token,
  885.     dm_off_t    off,
  886.     dm_size_t    len,
  887.     dm_off_t    *roffp,
  888.     dm_size_t    *rlenp);
  889.  
  890. extern int
  891. dm_punch_hole(
  892.     dm_sessid_t    sid,
  893.     void        *hanp,
  894.     size_t        hlen,
  895.     dm_token_t    token,
  896.     dm_off_t    off,
  897.     dm_size_t    len);
  898.  
  899. extern int
  900. dm_query_right(            /* not completely supported; see caveat above */
  901.     dm_sessid_t    sid,
  902.     void        *hanp,
  903.     size_t        hlen,
  904.     dm_token_t    token,
  905.     dm_right_t    *rightp);
  906.  
  907. extern int
  908. dm_query_session(
  909.     dm_sessid_t    sid,
  910.     size_t        buflen,
  911.     void        *bufp,
  912.     size_t        *rlenp);
  913.  
  914. extern dm_ssize_t
  915. dm_read_invis(
  916.     dm_sessid_t    sid,
  917.     void        *hanp,
  918.     size_t        hlen,
  919.     dm_token_t    token,
  920.     dm_off_t    off,
  921.     dm_size_t    len,
  922.     void        *bufp);
  923.  
  924. extern int
  925. dm_release_right(        /* not completely supported; see caveat above */
  926.     dm_sessid_t    sid,
  927.     void        *hanp,
  928.     size_t        hlen,
  929.     dm_token_t    token);
  930.  
  931. extern int
  932. dm_remove_dmattr(
  933.     dm_sessid_t    sid,
  934.     void        *hanp,
  935.     size_t        hlen,
  936.     dm_token_t    token,
  937.     int        setdtime,
  938.     dm_attrname_t    *attrnamep);
  939.  
  940. extern int
  941. dm_request_right(        /* not completely supported; see caveat above */
  942.     dm_sessid_t    sid,
  943.     void        *hanp,
  944.     size_t        hlen,
  945.     dm_token_t    token,
  946.     unsigned int    flags,
  947.     dm_right_t    right);
  948.  
  949. extern int
  950. dm_respond_event(
  951.     dm_sessid_t    sid,
  952.     dm_token_t    token,
  953.     dm_response_t    response,
  954.     int        reterror,
  955.     size_t        buflen,
  956.     void        *respbufp);
  957.  
  958. extern int
  959. dm_send_msg(
  960.     dm_sessid_t    targetsid,
  961.     dm_msgtype_t    msgtype,
  962.     size_t        buflen,
  963.     void        *bufp);
  964.  
  965. extern int
  966. dm_set_disp(
  967.     dm_sessid_t    sid,
  968.     void        *hanp,
  969.     size_t        hlen,
  970.     dm_token_t    token,
  971.     dm_eventset_t    *eventsetp,
  972.     unsigned int    maxevent);
  973.  
  974. extern int
  975. dm_set_dmattr(
  976.     dm_sessid_t    sid,
  977.     void        *hanp,
  978.     size_t        hlen,
  979.     dm_token_t    token,
  980.     dm_attrname_t    *attrnamep,
  981.     int        setdtime,
  982.     size_t        buflen,
  983.     void        *bufp);
  984.  
  985. extern int
  986. dm_set_eventlist(
  987.     dm_sessid_t    sid,
  988.     void        *hanp,
  989.     size_t        hlen,
  990.     dm_token_t    token,
  991.     dm_eventset_t    *eventsetp,
  992.     unsigned int    maxevent);
  993.  
  994. extern int
  995. dm_set_fileattr(
  996.     dm_sessid_t    sid,
  997.     void        *hanp,
  998.     size_t        hlen,
  999.     dm_token_t    token,
  1000.     unsigned int    mask,
  1001.     dm_fileattr_t    *attrp);
  1002.  
  1003. extern int
  1004. dm_set_inherit(                    /* not supported */
  1005.     dm_sessid_t    sid,
  1006.     void        *hanp,
  1007.     size_t        hlen,
  1008.     dm_token_t    token,
  1009.     dm_attrname_t    *attrnamep,
  1010.     mode_t        mode);
  1011.  
  1012. extern int
  1013. dm_set_region(
  1014.     dm_sessid_t    sid,
  1015.     void        *hanp,
  1016.     size_t        hlen,
  1017.     dm_token_t    token,
  1018.     unsigned int    nelem,
  1019.     dm_region_t    *regbufp,
  1020.     dm_boolean_t    *exactflagp);
  1021.  
  1022. extern int
  1023. dm_set_return_on_destroy(
  1024.     dm_sessid_t    sid,
  1025.     void        *hanp,
  1026.     size_t        hlen,
  1027.     dm_token_t    token,
  1028.     dm_attrname_t    *attrnamep,
  1029.     dm_boolean_t    enable);
  1030.  
  1031. extern int
  1032. dm_symlink_by_handle(                /* not supported */
  1033.     dm_sessid_t    sid,
  1034.     void        *dirhanp,
  1035.     size_t        dirhlen,
  1036.     dm_token_t    token,
  1037.     void        *hanp,
  1038.     size_t        hlen,
  1039.     char        *cname,
  1040.     char        *path);
  1041.  
  1042. extern int
  1043. dm_sync_by_handle(
  1044.     dm_sessid_t    sid,
  1045.     void        *hanp,
  1046.     size_t        hlen,
  1047.     dm_token_t    token);
  1048.  
  1049. extern int
  1050. dm_upgrade_right(        /* not completely supported; see caveat above */
  1051.     dm_sessid_t    sid,
  1052.     void        *hanp,
  1053.     size_t        hlen,
  1054.     dm_token_t    token);
  1055.  
  1056. extern dm_ssize_t
  1057. dm_write_invis(
  1058.     dm_sessid_t    sid,
  1059.     void        *hanp,
  1060.     size_t        hlen,
  1061.     dm_token_t    token,
  1062.     int        flags,
  1063.     dm_off_t    off,
  1064.     dm_size_t    len,
  1065.     void        *bufp);
  1066.  
  1067. /* Non-standard SGI additions to the DMAPI interface. */
  1068.  
  1069. int
  1070. dm_open_by_handle(
  1071.     void        *hanp,
  1072.     size_t        hlen,
  1073.     int        mode);
  1074.  
  1075. extern int
  1076. dm_get_dioinfo(
  1077.     dm_sessid_t    sid,
  1078.     void        *hanp,
  1079.     size_t        hlen,
  1080.     dm_token_t    token,
  1081.     dm_dioinfo_t    *diop);
  1082.  
  1083. #ifdef    __cplusplus
  1084. }
  1085. #endif
  1086.  
  1087. #endif /* __DMAPI_H__ */
  1088.